home *** CD-ROM | disk | FTP | other *** search
/ 3D Games - Real-time Rend…ng & Software Technology / 3D Games - Real-time Rendering & Software Technology.iso / flysdk / lib / 3dsImpExp.h next >
Encoding:
C/C++ Source or Header  |  2000-01-31  |  4.7 KB  |  189 lines

  1. #define MASTER_SCALE 0x100
  2. #define M3DMAGIC 0x4d4d
  3. #define M3D_VERSION 0x0002
  4. #define COLOR_24 0x0011
  5. #define INT_PERCENTAGE 0x0030
  6. #define MDATA 0x3d3d
  7. #define MAT_ENTRY 0xafff
  8. #define MAT_NAME 0xa000
  9. #define MAT_AMBIENT 0xa010
  10. #define MAT_DIFFUSE 0xa020
  11. #define MAT_SPECULAR 0xa030
  12. #define MAT_SHININESS 0xa040
  13. #define MAT_SHININESS_STRENGTH 0xa041
  14. #define MAT_TRANSPARENCY 0xa050
  15. #define MAT_TRANSPARENCY_FALLOFF 0xa052
  16. #define MAT_REFLECT_BLUR 0xa053
  17. #define MAT_SELF_ILLUM 0xa084
  18. #define MAT_SHADING 0xa100
  19. #define MAT_MAP_TEXTURE1 0xa200
  20. #define MAT_MAP_SPECULAR 0xa204
  21. #define MAT_MAP_OPACITY 0xa210
  22. #define MAT_MAP_REFLECTION 0xa220
  23. #define MAT_MAP_BUMP 0xa230
  24. #define MAT_MAP_TEXTURE2 0xa33a
  25. #define MAT_MAP_SHININESS 0xa33c
  26. #define MAT_MAP_SELFILLUM 0xa33d
  27. #define MESH_VERSION 0x3d3e
  28. #define MAPP_FILENAME 0xa300
  29. #define MAPP_OPTIONS 0xa351
  30. #define MAPP_FILTERING 0xa353
  31. #define MAPP_U_SCALE 0xa354
  32. #define MAPP_V_SCALE 0xa356
  33. #define MAPP_U_OFFSET 0xa358
  34. #define MAPP_V_OFFSET 0xa35a
  35. #define MAPP_ROTATION 0xa35C
  36. #define NAMED_OBJECT 0x4000
  37. #define N_TRI_OBJECT 0x4100
  38. #define POINT_ARRAY 0x4110
  39. #define FACE_ARRAY 0x4120
  40. #define MSH_MAT_GROUP 0x4130
  41. #define TEXT_COORD 0x4140
  42. #define SMOOTH_GROUP 0x4150
  43. #define LOCAL_AXIS 0x4160
  44. #define N_CAM_OBJECT 0x4700
  45. #define N_DIRECT_LIGHT 0x4600
  46. #define DL_SPOTLIGHT 0x4610
  47.  
  48. #define SizeofChunk 6
  49.  
  50. struct mapping
  51. {
  52.     char filename[256];
  53.     short int type,amount,options;
  54.     float filtering;
  55.     float u_scale,v_scale,u_offset,v_offset;
  56.     float rotation;
  57.     int piclibindx;
  58. };
  59.  
  60. class material
  61. {
  62. public:
  63.     float reflection;
  64.     float ambient[4];
  65.     float diffuse[4];
  66.     float specular[4];
  67.     float shininess;
  68.     float shininess_strength;
  69.     float transparency;
  70.     float transparency_falloff;
  71.     float reflect_blur;
  72.     short int material_type;
  73.     float self_illum;
  74.  
  75.     char name[256];
  76.  
  77.     struct mapping 
  78.         map_texture1,map_texture2,
  79.         map_opacity,map_bump,map_specular,
  80.         map_shininess,map_selfillum,map_reflection;
  81.  
  82.     material()
  83.     {
  84.         memset(this,0,sizeof(material));
  85.     }
  86.  
  87.     int l;
  88. };
  89.  
  90. class FLY_API export3ds
  91. {
  92. public:
  93.     FILE *m_fp;
  94.  
  95.     export3ds(char *, float, material *, int);
  96.     ~export3ds(void);
  97.     void WriteNamedObject(
  98.         char *, float *, float *,
  99.         unsigned short, unsigned short *, 
  100.         unsigned short, unsigned short *, 
  101.         int, material *,float *);
  102.     void close();
  103.  
  104. private:
  105.     long MDATA_size, MDATA_bpatch;
  106.     long M3DMAGIC_size, M3DMAGIC_bpatch;
  107.  
  108.     void WriteString(char *);
  109.     void WriteUShort(unsigned short);
  110.     void WriteULong(unsigned long);
  111.     void WriteLong(long);
  112.     void WriteByte(char);
  113.     void WriteShort(short);
  114.     void WriteFloat(float);
  115.     void WriteUByte(unsigned char);
  116.     long WriteChunk(unsigned short, long);
  117.     long WritePatch(long, long);
  118.     void WriteMData_Ini(material *, int);
  119.     long WriteMData_Fim();
  120.     long WriteMeshVersion(long);
  121.     long WriteMatEntries(material *, int);
  122.     long WriteChunkString(unsigned short, char *);
  123.     long WriteChunkMapping(unsigned short, struct mapping *);
  124.     long WriteColor(float [3]);
  125.     long WriteTriObject(
  126.         float *, float *, unsigned short,
  127.         unsigned short *, unsigned short,
  128.         unsigned short *, int, material *,float *);
  129.     long WritePointArray(float *, unsigned short);
  130.     long WriteFaceArray(
  131.         unsigned short *, unsigned short, unsigned short *,
  132.         int, material *);
  133.     long WriteMaterial(unsigned short *, int, material *);
  134.     long WriteTextCoord(float *, unsigned short);
  135.     long WriteO();
  136.     long WriteMasterScale();
  137. };
  138.  
  139. class FLY_API import3ds
  140. {
  141.     fly_pak fp;
  142.     char *chunk;
  143.     int chunklen;
  144.     unsigned short chunkid;
  145.     int filepos,nmat;
  146.     material *matlib;
  147.     float masterscale,scale;
  148.     
  149.     virtual void object3d(char *name,int nv,int nf,int ntc,float *local_axis)
  150.     { ; };
  151.     virtual void vertex3(float *vec)
  152.     { ; };
  153.     virtual void text_coord(float *uv)
  154.     { ; };
  155.     virtual void face3(unsigned short *fa)
  156.     { ; };
  157.     virtual void camera(char *name, float *pos, float *target, float bank, float lens)
  158.     { ; };
  159.     virtual void pointlight(char *name, float *pos,float *color)
  160.     { ; };
  161.     virtual void spotlight(char *name, float *pos,float *target,float *color,float hotspot,float falloff)
  162.     { ; };
  163.     virtual void face_material(material *mat,int nf,unsigned short *faces)
  164.     { ;    };
  165.     virtual int object_name(char *name)
  166.     { return 1;    };
  167.  
  168.     int read_chunk();
  169.     void jump_chunk();
  170.     void load_chunk();
  171.     void load_object();
  172.     void load_string(char *str);
  173.     void load_light(char *objname);
  174.     void load_mesh(char *objname);
  175.     void load_mapping(struct mapping *mat);
  176.     void load_material();
  177.  
  178. public:
  179.     import3ds() 
  180.         { 
  181.         chunk=0; chunklen=0; nmat=0; matlib=0; masterscale=1.0f; scale=1.0; filepos=0;
  182.         };
  183.     ~import3ds() 
  184.         { 
  185.         if (chunk) delete chunk; 
  186.         if (matlib) delete matlib; 
  187.         };
  188.     int import(char *name,float scalefactor);
  189. };